package com.itextpdf.text.pdf; import com.itextpdf.testutils.CompareTool; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.io.TempFileCache; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import org.junit.Assert; import org.junit.Test; import org.xml.sax.SAXException; public class PdfAWriterTest { private static final String outputDir = "./target/test/writer/"; static { new File(outputDir).mkdirs(); } @Test public void testCreatePdfA_1() throws DocumentException, IOException { Document document; PdfAWriter writer; try { document = new Document(); writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "testCreatePdfA_1.pdf"), PdfAConformanceLevel.PDF_A_1B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); } catch (PdfAConformanceException e) { Assert.fail("PdfAConformance exception should not be thrown: " + e.getLocalizedMessage()); } } @Test public void testCreatePdfA_2() throws DocumentException, IOException { boolean exceptionThrown = false; Document document; PdfAWriter writer; try { document = new Document(); writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "testCreatePdfA_1.pdf"), PdfAConformanceLevel.PDF_A_1A); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.NOT_EMBEDDED, 12, Font.BOLD); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown"); } @Test public void testPdfAStamper1() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "testPdfAStamper.pdf"), PdfAConformanceLevel.PDF_A_1B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); PdfReader reader = new PdfReader(outputDir + "testPdfAStamper.pdf"); PdfAStamper stamper = new PdfAStamper(reader, new FileOutputStream(outputDir + "testPdfAStamper_.pdf"), PdfAConformanceLevel.PDF_A_1B); stamper.close(); reader.close(); } @Test public void testPdfAStamper2() throws DocumentException, IOException { Document document = new Document(); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "testPdfAStamper.pdf"), PdfAConformanceLevel.PDF_A_2B); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.close(); PdfReader reader = new PdfReader(outputDir + "testPdfAStamper.pdf"); boolean exceptionThrown = false; try { PdfAStamper stamper = new PdfAStamper(reader, new FileOutputStream(outputDir + "testPdfAStamper_.pdf"), PdfAConformanceLevel.PDF_A_1B); stamper.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } reader.close(); if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown"); } @Test public void testPdfAStamper3() throws DocumentException, IOException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputDir + "testPdfAStamper.pdf")); writer.createXmpMetadata(); document.open(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); document.add(new Paragraph("Hello World", font)); document.close(); PdfReader reader = new PdfReader(outputDir + "testPdfAStamper.pdf"); boolean exceptionThrown = false; try { PdfAStamper stamper = new PdfAStamper(reader, new FileOutputStream(outputDir + "testPdfAStamper_.pdf"), PdfAConformanceLevel.PDF_A_1A); stamper.close(); } catch (PdfAConformanceException e) { exceptionThrown = true; } reader.close(); if (!exceptionThrown) Assert.fail("PdfAConformance exception should be thrown"); } @Test public void taggedPdfADocumentUsingExternalCacheTest() throws IOException, DocumentException, InterruptedException, ParserConfigurationException, SAXException { int NUMBER_OF_ITERATIONS = 1000; Document document = new Document(); Font font = FontFactory.getFont("./src/test/resources/com/itextpdf/text/pdf/FreeMonoBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 12); PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream(outputDir + "MemoryPDF.pdf"), PdfAConformanceLevel.PDF_A_2A); TempFileCache fileCache = new TempFileCache(outputDir + "cacheFile"); writer.createXmpMetadata(); writer.setPdfVersion(PdfAWriter.PDF_VERSION_1_7); writer.addDeveloperExtension(PdfDeveloperExtension.ADOBE_1_7_EXTENSIONLEVEL3); writer.setTagged(); writer.useExternalCacheForPdfA(fileCache); writer.useExternalCacheForTagStructure(fileCache); document.open(); writer.createXmpMetadata(); ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("./src/test/resources/com/itextpdf/text/pdf/sRGB Color Space Profile.icm")); writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); document.addLanguage("en"); document.addTitle("My first PDF"); document.addSubject("Using iText"); document.addKeywords("Java, PDF, iText"); document.addAuthor("Lars Vogel"); document.addCreator("Lars Vogel"); document.addTitle("Sample pdf for ada test"); PdfPCell cell = null; for (int k = 1; k < NUMBER_OF_ITERATIONS; k++) { PdfPTable table = new PdfPTable(4); if (k % 1000 == 0) System.out.println("Row ::" + k); cell = new PdfPCell(); cell.addElement(new Phrase(String.valueOf(k) + "_1", font)); table.addCell(cell); cell = new PdfPCell(); cell.addElement(new Phrase(String.valueOf(k) + "_2", font)); table.addCell(cell); cell = new PdfPCell(); cell.addElement(new Phrase(String.valueOf(k) + "_3", font)); table.addCell(cell); cell = new PdfPCell(); PdfPTable inner_table = new PdfPTable(4); PdfPCell inner_cell = null; for (int j = 1; j < 5; j++) { inner_cell = new PdfPCell(); inner_cell.addElement(new Phrase(String.valueOf(k) + "_" + j, font)); inner_table.addCell(inner_cell); } cell.addElement(inner_table); table.addCell(cell); document.add(table); } document.close(); writer.close(); fileCache.close(); String errorMessage; String outPdf = outputDir + "MemoryPDF.pdf"; String cmpPdf = "./src/test/resources/com/itextpdf/text/pdf/externalCaching/cmp_MemoryPDF.pdf"; CompareTool compareTool = new CompareTool(); errorMessage = compareTool.compareByContent(outPdf, cmpPdf, outputDir, "diff"); if (errorMessage != null) Assert.fail(errorMessage); // errorMessage = compareTool.compareTagStructures(outPdf, cmpPdf); // if (errorMessage != null) // Assert.fail(errorMessage); } }